#include "head.h"
#include "sem.h"

void sem_set(int semid, int semnum, int val)
{
    union semun a;
    a.val = val;
    semctl(semid, semnum, SETVAL, a);
}


bool sem_p(int semid, int semnum)
{
    struct sembuf ops[1];
    ops[0].sem_num = semnum;
    ops[0].sem_op  = -1;
    if(semop(semid, ops, 1)==-1)
    {
        return false;
    }
    return true;

    // 对信号量semid中的两个元素
    // 进行原子性的P/V操作
    // struct sembuf ops[2];
    // ops[0].sem_num = semnum;
    // ops[0].sem_op  = -1;
    // ops[1].sem_num = semnum;
    // ops[1].sem_op  = +1;
    // semop(semid, ops, 2);
}


bool sem_v(int semid, int semnum)
{
    struct sembuf ops[1];
    ops[0].sem_num = semnum;
    ops[0].sem_op  = +1;
    if(semop(semid, ops, 1)==-1)
    {
        return false;
    }
    return true;
}